package jsqlparser;

import java.util.List;

import org.junit.Test;

import com.alibaba.druid.sql.SQLUtils;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser;
import com.alibaba.druid.sql.dialect.oracle.visitor.OracleExportParameterVisitor;
import com.alibaba.druid.sql.dialect.oracle.visitor.OracleOutputVisitor;
import com.alibaba.druid.sql.parser.Lexer;
import com.alibaba.druid.sql.parser.Token;
import com.alibaba.druid.util.JdbcConstants;

public class Main {

	public static void main(String[] args) {
		final String dbType = JdbcConstants.MYSQL; // 可以是ORACLE、POSTGRESQL、SQLSERVER、ODPS等
		String sql = "select * from t";
		List<SQLStatement> stmtList = SQLUtils.parseStatements(sql, dbType);
		// stmtList
		// ExportParameterVisitor

		sql = "SELECT /*mark for picman*/ * FROM WP_ALBUM WHERE MEMBER_ID = ? AND ID IN (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";

		Lexer lexer = new Lexer(sql);
		for (;;) {
			lexer.nextToken();
			Token tok = lexer.token();

			if (tok == Token.IDENTIFIER) {
				System.out.println(tok.name() + "\t\t" + lexer.stringVal());
			} else if (tok == Token.MULTI_LINE_COMMENT) {
				System.out.println(tok.name() + "\t\t" + lexer.stringVal());
			} else {
				System.out.println(tok.name() + "\t\t\t" + tok.name);
			}

			if (tok == Token.EOF) {
				break;
			}
		}
	}

	@Test
	public void test_1() throws Exception {
		String sql = "SELECT /*mark for picman*/ * FROM WP_ALBUM WHERE MEMBER_ID = ? AND ID IN (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";

		StringBuilder out = new StringBuilder();
		OracleOutputVisitor visitor = new OracleOutputVisitor(out);
		OracleStatementParser parser = new OracleStatementParser(sql);
		List<SQLStatement> statementList = parser.parseStatementList();
		for (SQLStatement statement : statementList) {
			statement.accept(visitor);
			visitor.print(";");
			visitor.println();
		}

		System.out.println(out.toString());
	}

	@Test
	public void test_2() throws Exception {
		String sql = "SELECT /*mark for picman*/ * FROM WP_ALBUM WHERE MEMBER_ID = ? AND ID IN ('b','c',?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
//
//		StringBuilder out = new StringBuilder();
//		OracleOutputVisitor visitor = new ParameterizedOutputVisitor(out);
//		OracleStatementParser parser = new OracleStatementParser(sql);
//		List<SQLStatement> stmtList = parser.parseStatementList();
//		for (SQLStatement stmt : stmtList) {
//			stmt.accept(visitor);
//			List<Object> list = visitor.getParameters();
//			for (Object obj : list) {
//				System.out.println(obj);
//			}
//		}
//		System.out.println(out.toString());
	}

}
